home *** CD-ROM | disk | FTP | other *** search
- #include "mutex.h"
- const int ERROR_DUPLICATE_NAME = 285;
-
- #include <string.h>
- #include <stdio.h>
-
- mutex::mutex( const char const* name ) {
-
- // -------------------------------------------------------------------
- // the first order of business is to create the name of the semaphore.
- // to do this, we will need 7 bytes (for "\\sem32\\") plus enough for
- // the name plus one more for the null.
- // -------------------------------------------------------------------
-
- sem_name = new char [ 8 + strlen( name ) ];
-
-
- // --------------------------------------------------------------------
- // now that the memory is allocated, copy "\\sem32\\" and the semaphore
- // name into the new string.
- // --------------------------------------------------------------------
-
- strcpy( sem_name, "\\SEM32\\" ); // create first part of string
- strcat( sem_name, name ); // append the user semaphore name
-
- handle = 0;
- rc = DosCreateMutexSem( // create the semaphore
- sem_name, // name of semaphore
- &handle, // handle of semaphore
- 0, // unused by OS/2
- 0 ); // initial state is owned
-
- if ( rc == ERROR_DUPLICATE_NAME ) {
-
- // ------------------------------------------------------
- // at some point, this semaphore has already been created
- // so we open it for use here
- // ------------------------------------------------------
-
- handle = 0;
- DosOpenMutexSem( sem_name, &handle );
- }
-
- // --------------------------------------------------------------
- // request the semaphore to block other threads from the resource
- // --------------------------------------------------------------
-
- DosRequestMutexSem( handle, SEM_INDEFINITE_WAIT );
-
- // -------------------------------------------------------------
- // by the time the code reaches here, we either waited for total
- // control, or we created the semaphore.
- // -------------------------------------------------------------
-
- return;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////
-
- mutex::~mutex() {
-
- // ----------------------------------------------------------------
- // the function that created *this has ended, so we can release the
- // mutex semaphore
- // ----------------------------------------------------------------
-
- DosReleaseMutexSem( handle );
- delete [] sem_name; // free memory allocated
- }
-